<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 裁剪数字后查询第 K 小的数字 -->
    <script>
      /*
        思路：
          数据规模较小
          1. 预处理 nums 中每个数字的后 n 个位的数字，存储起来，方便每次 query 不要再次计算
          2. 对于每个 query，把需要的最多 100 个特定位的数字放到数组中，排序（规则：先按大小、再按索引）即可，返回最大的
      */
      var smallestTrimmedNumbers = function (nums, queries) {
        let n = nums.length
        let queryLen = queries.length
        let ans = new Array(queryLen)
        let pre = new Array(n).fill(0)
        for (let i = 0; i < nums.length; i++) {
          pre[i] = bitSum(nums[i])
        }
        for (let i = 0; i < queries.length; i++) {
          let [k, trim] = queries[i]
          let keys = [...new Array(n).keys()]
          keys.sort((a, b) => {
            if (pre[a][trim - 1] === pre[b][trim - 1]) {
              return a - b
            }
            return pre[a][trim - 1] > pre[b][trim - 1] ? 1 : -1
          })
          ans[i] = keys[k - 1]
        }

        return ans
      }
    </script>
  </body>
</html>
